From 826202abce0f1c108a4132e9b791de4b7ee9d2d7 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 23 Jan 2008 18:12:37 +0000 Subject: [PATCH] ioemu: handle empty vnc passwd Have xenstore_read_vncpasswd return -1 when it is unable to read the passwd from XenStore (and store an empty password). However, don't exit in such case since it may just mean that the use didn't set a passwd. If he really did, xend would have given the passwd flag in the -vnc option, and the empty passwd would make the vnc authentication reject any password anyway. Signed-off-by: Samuel Thibault Acked-by: Daniel P. Berrange --- tools/ioemu/vl.c | 3 +-- tools/ioemu/vl.h | 2 +- tools/ioemu/xenstore.c | 25 ++++++++++--------------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/tools/ioemu/vl.c b/tools/ioemu/vl.c index bb12a3fd99..939149c46f 100644 --- a/tools/ioemu/vl.c +++ b/tools/ioemu/vl.c @@ -7756,8 +7756,7 @@ int main(int argc, char **argv) int vnc_display_port; char password[20]; vnc_display_init(ds); - if (xenstore_read_vncpasswd(domid, password, sizeof(password)) < 0) - exit(0); + xenstore_read_vncpasswd(domid, password, sizeof(password)); vnc_display_password(ds, password); if ((vnc_display_port = vnc_display_open(ds, vnc_display, vncunused)) < 0) exit (0); diff --git a/tools/ioemu/vl.h b/tools/ioemu/vl.h index 7b6c3febc7..9d78cd25d9 100644 --- a/tools/ioemu/vl.h +++ b/tools/ioemu/vl.h @@ -1463,7 +1463,7 @@ void xenstore_process_event(void *opaque); void xenstore_record_dm_state(char *state); void xenstore_check_new_media_present(int timeout); void xenstore_write_vncport(int vnc_display); -int xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen); +void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen); int xenstore_domain_has_devtype(struct xs_handle *handle, const char *devtype); diff --git a/tools/ioemu/xenstore.c b/tools/ioemu/xenstore.c index 88466139ed..b02f6bea07 100644 --- a/tools/ioemu/xenstore.c +++ b/tools/ioemu/xenstore.c @@ -489,19 +489,20 @@ void xenstore_write_vncport(int display) free(buf); } -int xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen) +void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen) { char *buf = NULL, *path, *uuid = NULL, *passwd = NULL; unsigned int i, len, rc = 0; - if (xsh == NULL) { - return -1; - } + pwbuf[0] = '\0'; + + if (xsh == NULL) + return; path = xs_get_domain_path(xsh, domid); if (path == NULL) { fprintf(logfile, "xs_get_domain_path() error. domid %d.\n", domid); - return -1; + return; } pasprintf(&buf, "%s/vm", path); @@ -509,35 +510,29 @@ int xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen) if (uuid == NULL) { fprintf(logfile, "xs_read(): uuid get error. %s.\n", buf); free(path); - return -1; + return; } pasprintf(&buf, "%s/vncpasswd", uuid); passwd = xs_read(xsh, XBT_NULL, buf, &len); if (passwd == NULL) { fprintf(logfile, "xs_read(): vncpasswd get error. %s.\n", buf); - pwbuf[0] = '\0'; free(uuid); free(path); - return rc; + return; } - for (i=0; i